﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Olympic_email_to_future.Module;
using Olympic_email_to_future.IDAL;

namespace Olympic_email_to_future.DAL
{
    class MailDAL : IMailInfo
    {
        MailInfoDataContext ctx = new MailInfoDataContext("Data Source=WIN-0HVEJRO90DS\\SQLEXPRESS;Initial Catalog=Olympic;Integrated Security=True");



        /*******************************************************************
         * * 函数名称：getMailInfoBydefault
         * * 功    能：返回所有MailInfo列表
         * * 参    数：
         * * 返 回 值：
         * * 作    者：LHX
         * * 日    期：2013年5月25日
         * *******************************************************************/
        public IList<Module.MailInfo> getMailInfoBydefault()
        {
            IList<Module.MailInfo> maillist = new List<Module.MailInfo>();

            var result = from mail in ctx.MailInfo select mail;
            foreach (Module.MailInfo mail in result)
            {
                maillist.Add(mail);
            }

            return maillist;
        }



        /*******************************************************************
        * * 函数名称：getMailInfoByMailAddress
        * * 功    能：按照发件地址返回邮件列表
        * * 参    数：string EmailAddress  收件人地址  如果没有
        * * 返 回 值：
        * * 作    者：LHX
        * * 日    期：2013年5月25日
        * *******************************************************************/
        public IList<Module.MailInfo> getMailInfoByMailAddress(string EmailAddress)
        {
            IList<Module.MailInfo> maillist = new List<Module.MailInfo>();
            var result = from mail in ctx.MailInfo where mail.mailSenderAddress.Equals(EmailAddress) orderby mail.mailCreateDate descending select mail;
            foreach (Module.MailInfo mail in result)
            {
                maillist.Add(mail);
            }


            return maillist;
        }



        /*******************************************************************
         * * 函数名称：getMailInfoByMailId
         * * 功    能：按照邮件id返回邮件
         * * 参    数：int id  邮件id
         * * 返 回 值：MailInfo对象
         * * 作    者：LHX
         * * 日    期：2013年5月27日
         * *******************************************************************/
        public Module.MailInfo getMailInfoByMailId(int mailid)
        {
            Module.MailInfo mail = ctx.MailInfo.SingleOrDefault(p => p.mailId == mailid);
            return mail;
        }




        /*******************************************************************
        * * 函数名称：deleteMialInfoByEmaiId
        * * 功    能：删除邮件
        * * 参    数：int mailid  邮件id   
        * * 返 回 值：void
        * * 作    者：LHX
        * * 日    期：2013年5月27日
        * *******************************************************************/
        public void deleteMialInfoByEmaiId(int mailid)
        {
            Module.MailInfo mailinfo = ctx.MailInfo.SingleOrDefault(mail => mail.mailId == mailid);
            ctx.MailInfo.DeleteOnSubmit(mailinfo);
            ctx.SubmitChanges();
        }



        /*******************************************************************
        * * 函数名称：insertMailInfo
        * * 功    能：插入邮件对象
        * * 参    数：MailInfo mailinfo
        * * 返 回 值：void
        * * 作    者：LHX
        * * 日    期：2013年5月27日
        * *******************************************************************/
        public int insertMailInfo(Module.MailInfo mailinfo)
        {
            ctx.MailInfo.InsertOnSubmit(mailinfo);

            ctx.SubmitChanges();
            return mailinfo.mailId;

        }


        /*******************************************************************
         * * 函数名称：getMailByCurrentTime
         * * 功    能：返回当前时间(当前分钟)应该发送的邮件列表  将datetime进行分钟化
         * * 参    数：
         * * 返 回 值：IList<Module.MailInfo>
         * * 作    者：LHX
         * * 日    期：2013年5月28日
         * *******************************************************************/
        public IList<Module.MailInfo> getMailByCurrentTime()
        {
            IList<Module.MailInfo> list = new List<Module.MailInfo>();
            DateTime current = DateTime.Now;
            DateTime time = new DateTime(current.Year, current.Month, current.Day, current.Hour, current.Minute, 0);

            var result = from mail in ctx.MailInfo where mail.mailSendDate == time select mail;

            foreach (Module.MailInfo mail in result)
            {
                list.Add(mail);

            }
            /*Module.MailInfo testMail = new Module.MailInfo();
            testMail.mailContent = "asgasd";
            testMail.mailSendDate = DateTime.Now.AddMinutes(3);
            testMail.mailCreateDate = DateTime.Now;
            testMail.mailIsPublic = 1;
            testMail.mailReceiverAddress = "hanxuzaihuiwen@qq.com";
            testMail.mailTitle = "test";
            list.Add(testMail);*/

            return list;

        }

        /*******************************************************************
         * * 函数名称：getMailByPublic
         * * 功    能：返回公开邮件
         * * 参    数：
         * * 返 回 值：IList<MailInfo>
         * * 作    者：LHX
         * * 日    期：2013年6月2日
         * *******************************************************************/
        public IList<MailInfo> getMailByPublic()
        {
            IList<MailInfo> list = new List<MailInfo>();
            int publicMail = 1;


            var result = from mail in ctx.MailInfo where mail.mailIsPublic == publicMail orderby mail.mailCreateDate descending select mail;
            foreach (Module.MailInfo mail in result)
            {
                list.Add(mail);

            }
            return list;

        }

        /*******************************************************************
         * * 函数名称：updateState
         * * 功    能：更改邮件发送状态
         * * 参    数：
         * * 返 回 值：
         * * 作    者：LHX
         * * 日    期：2013年6月8日
         * *******************************************************************/
        public void updateState(int mailid)
        {
            MailInfo mailtoUpdate = ctx.MailInfo.SingleOrDefault(mail => mail.mailId == mailid);
            mailtoUpdate.mailState = 1;
            ctx.SubmitChanges();
        }

        /*******************************************************************
         * * 函数名称：updatePublic
         * * 功    能：更改邮件公开状态
         * * 参    数：
         * * 返 回 值：
         * * 作    者：MDL
         * * 日    期：2013年6月8日
         * *******************************************************************/
        public void updatePublic(int mailid)
        {
            MailInfo mailtoUpdate = ctx.MailInfo.SingleOrDefault(mail => mail.mailId == mailid);
            mailtoUpdate.mailIsPublic = 0;
            ctx.SubmitChanges();
        }
    }
}
